
//--------------------------------------------------
//---------------- CLASE JSTemplate ----------------
//--------------------------------------------------

function JSTemplate() {
    
    //--------------------------------------------------------------------------------
    // Atributos privados
    //--------------------------------------------------------------------------------

    var jsUtils = new JSUtils();
    var jsScroll = new JSScroll();

    var edicionActual = new JSDatosEdicion();

    //--------------------------------------------------------------------------------
    // Metodos públicos
    //--------------------------------------------------------------------------------

    this.iniControles = function() {
        $("#tbarNuevo").click(actionNuevo);
        $("#tbarAbrir").click(actionAbrir);
        $("#tbarGuardar").click(actionSoloGuardar);
        $("#tbarConsolidar").click(actionConsolidar);
        
        edicionActual.nombreTemplate = "";
    }
    
    //--------------------------------------------------------------------------------
    // Metodos Privados
    //--------------------------------------------------------------------------------

    // Manejadores de eventos de cada boton
    
    function actionNuevo() {
        
        if (edicionActual.nombreTemplate == ""){
            $( "#dialog-nuevo" ).dialog({
                resizable: true,
                height:450,
                width: 350,
                modal: true,
                buttons: {
                        "Crear": function() {
                                var id =  $("#txtIdTemplateCrear").val();
                                var nombre = $("#txtNombreTemplateCrear").val();
                                var pathLayout = $(".ui-selected .IdLayout").attr("id").split("_")[0];
                                var nombreArchivoLayout = $(".ui-selected .IdLayout").attr("id").split("_")[1];
                                var versionLayout = $(".ui-selected .IdLayout").attr("id").split("_")[2];

                                crearTemplate(id, nombre, pathLayout, nombreArchivoLayout, versionLayout);
                        },
                        Cancel: function() {
                                $( this ).dialog( "close" );
                        }
                    }
            });

            $('#dialog-nuevo').dialog('open');

            jsScroll.iniControles();
        }
        else{
            $( "#dialog-desea-guardar" ).dialog({
                resizable: true,
                height:250,
                width: 380,
                modal: true,
                buttons: {
                        "Guardar": function() {
                                $( this ).dialog( "close" );
                                actionGuardar("nuevo");
                        },
                        "No Guardar": function() {
                                $( this ).dialog( "close" );
                                limpiarEdicionActual();
                                actionNuevo();
                        },
                        Cancel: function() {
                                $( this ).dialog( "close" );
                        }
                    }
            });
        }
        
        
        return false;
    }

    //------------------------------------------------------------------------------

    function edicionesTemplatesCallback(data){
        
        var edicionesTemplates = ""
        
        $.each(data, function(index, elem) {
            edicionesTemplates += '<li class="ui-widget-content" id="' + elem.identif + '">' + elem.nombre + '(Versión ' + elem.numeroVersion + ')</li>'
        });
        
        $("#selectableTemplatesLocales").html(edicionesTemplates);
        
        $("#selectableTemplatesLocales").selectable();
    }

    //------

    function actionAbrir() {
        
        jsUtils.peticionAjaxCallBack("template", "edicionesTemplates", edicionesTemplatesCallback, null);
        
        $( "#dialog-abrir" ).dialog({
            resizable: true,
            height:600,
            width: 500,
            modal: true,
            buttons: {
                    "Abrir": function() {
                            $( this ).dialog( "close" );
                    },
                    Cancel: function() {
                            $( this ).dialog( "close" );
                    }
                }
        });
        
        $("#accordion-abrir" ).accordion();
        //$("#selectableTemplatesLocales").selectable();
        
        $('#dialog-abrir').dialog('open');
        return false;
    }

    //------------------------------------------------------------------------------
    
    function actionSoloGuardar(){
        actionGuardar("");
    }
    
    //---
    
    function actionGuardar(accion_a_volver) {
        $( "#dialog-guardar" ).dialog({
            resizable: true,
            height:300,
            width: 350,
            modal: true,
            buttons: {
                    "Guardar": function() {
                            $("#gifLoadGuardarTemplate").css("display", "block");
                        
                            //TODO: Hacer efectivo el Guardado
                            var numeroVersion =  $("#txtVersionTemplateGuardar").val();
                            
                            guardarTemplate(numeroVersion);
                            
                            if (accion_a_volver != ""){
                                limpiarEdicionActual();
                                if (accion_a_volver == "nuevo"){
                                    actionNuevo();
                                }
                                else if (accion_a_volver == "abrir"){
                                    actionAbrir();
                                } 
                            }
                    },
                    Cancel: function() {
                            $( this ).dialog( "close" );
                    }
                }
        });
        
        $('#dialog-guardar').dialog('open');
        
        return false;
    }

    //------------------------------------------------------------------------------

    function actionConsolidar() {
        $( "#dialog-consolidar" ).dialog({
            resizable: true,
            height:300,
            width: 400,
            modal: true,
            buttons: {
                    "Consolidar": function() {
                            var path = $("#txtPathTemplateConsolidar").val();
                            consolidarTemplate(path);
                    },
                    Cancel: function() {
                            $( this ).dialog( "close" );
                    }
                }
        });
        
        $('#dialog-consolidar').dialog('open');
        return false;
    }

    //------------------------------------------------------------------------------

    function crearTemplate(id, nombre, pathLayout, nombreArchivoLayout, versionLayout){
        $("#gifLoadCrearTemplate").css("display", "block");
        var params = "id=" + id + "&nombre=" + nombre + "&pathLayout=" + pathLayout + "&nombreArchivoLayout=" + nombreArchivoLayout + "&versionLayout=" + versionLayout;
        jsUtils.peticionAjaxCallBackParametros("template", "crear", params, callbackCrearTemplate, callbackError);
        //jsUtils.peticionAjaxCallBack("template", "crear", callbackCrearTemplate, callbackError);
    }
    
    //------------------------------------------------------------------------------
    
    function callbackCrearTemplate(data){
        // TODO: Cargar arbol de arquetipos si ya no está cargado
        $("#lblNombreTemplate").html(" " + data.nombreTemplate);
        $("#gifLoadCrearTemplate").css("display", "none");
        $("#dialog-nuevo").dialog( "close" );
        
        edicionActual.pathLayout = data.pathLayout;
        edicionActual.nombreArchivoLayout = data.nombreArchivoLayout;
        edicionActual.versionLayout = data.versionLayout;
        edicionActual.nombreTemplate = data.nombreTemplate;
        edicionActual.nombreArchivoTemplate = data.id;
        edicionActual.versionTemplate = "1";
        
        cargarLayoutEditor();
        limpiarControlesCrear();
    }
    
    //------------------------------------------------------------------------------
    
    function callbackError(msg){
        alert("Error: " + msg);
    }
    
    //------------------------------------------------------------------------------

    function abrirTemplateRemoto(path, nombre, version){
        
    }
    
    //------------------------------------------------------------------------------

    function abrirTemplateLocal(tipo, nombre){
        
    }
    
    //------------------------------------------------------------------------------

    function guardarTemplate(versionTemplate){
        
        loadEstructuraTemplate();
        var template = nodesTemplate;
        
        template.pathLayout = edicionActual.pathLayout;
        template.nombreArchivoLayout = edicionActual.nombreArchivoLayout;
        template.versionLayout = edicionActual.versionLayout;
        template.nombreTemplate = edicionActual.nombreTemplate;
        template.nombreArchivoTemplate = edicionActual.nombreArchivoTemplate;
        template.versionTemplate = versionTemplate;
        
        //template.archetypeRoot = "openEHR-EHR-SECTION.prehospitalario";
        //template.archetypeRootVersion = "1"
        
        //var zona1 = new JSEstructuraZona();
	//var zona2 = new JSEstructuraZona();
        //zona1.nodesArchetype = ["at0003","at0004","at0006","at0007","at0014","at0016"];
        //zona1.archetype = "openEHR-EHR-ACTION.aaa";

        //zona2.nodesArchetype = ["at0013","at0014","at0016","at0017","at0114","at0116"];
        //zona2.archetype = "openEHR-EHR-OBSERVATION.bbb";

        //template.zones["zona1"] = zona1;
        //template.zones["zona2"] = zona2;
        
        var params = {datosTemplate: JSON.stringify(template)}
        jsUtils.peticionAjaxCallBackParametros("template", "guardar", params, callbackGuardarTemplate, callbackError);
    }
    
    //---
    
    function callbackGuardarTemplate(data){
        
        if (data.resultado.error == ""){
            edicionActual.versionTemplate = data.resultado.versionTemplate;
            $("#gifLoadGuardarTemplate").css("display", "none");
            $("#dialog-guardar").dialog( "close" );
        }
    }
    
    //------------------------------------------------------------------------------

    function consolidarTemplate(path){
        
        loadEstructuraTemplate(); // carga variable global nodesTemplate (mejorar esto)
        var template = nodesTemplate;
        
        template.pathLayout = edicionActual.pathLayout;
        template.nombreArchivoLayout = edicionActual.nombreArchivoLayout;
        template.versionLayout = edicionActual.versionLayout;
        template.nombreTemplate = edicionActual.nombreTemplate;
        template.nombreArchivoTemplate = edicionActual.nombreArchivoTemplate;
        template.versionTemplate = edicionActual.versionTemplate;
        template.pathTemplate = path;
        
        var params = {datosTemplate: JSON.stringify(template)}

        jsUtils.peticionAjaxCallBackParametros("template", "consolidar", params, callbackConsolidarTemplate, callbackError);
    }

    //---

    function callbackConsolidarTemplate(data){
        
        if (data.resultado.error == ""){
            $("#gifLoadConsolidarTemplate").css("display", "none");
            $("#dialog-consolidar").dialog( "close" );
        }
    }

    //------------------------------------------------------------------------------
    
    function limpiarControlesCrear(){
        $("#txtIdTemplateCrear").val("");
        $("#txtNombreTemplateCrear").val("");
        $(".ui-selected").removeClass("ui-selected");
    }
    
    //------------------------------------------------------------------------------
    
    function cargarLayoutEditor(){
        $(".middle-center .content").html($(".ui-selected").html());
        $(".middle-center .content table").css("height", "100%");
        $(".middle-center .content table").css("border-color", "gray");
        $(".middle-center .content table tr td").css("border-color", "gray");
    }
    
    //------------------------------------------------------------------------------
    
    function limpiarLayoutEditor(){
        $(".middle-center .content").html();
    }
    
    //------------------------------------------------------------------------------
    
    function limpiarEdicionActual(){
        edicionActual.nombreTemplate = "";
        edicionActual.pathTemplate = "";
        edicionActual.nombreArchivoTemplate = "";
        edicionActual.versionTemplate = "";

        edicionActual.pathLayout = "";
        edicionActual.nombreArchivoLayout = "";
        edicionActual.versionLayout = "";
        
        $("#lblNombreTemplate").html("");
        limpiarLayoutEditor();
    }
    
    //------------------------------------------------------------------------------
}

//----------------------------------------------------------------------------------



